﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
using UnityEngine.SceneManagement;

// 负责场景加载及管理
public class SceneMgr : Singleton<SceneMgr>
{
    // 场景逻辑控制
    SceneLogic _curSceneLogic;
    //AsyncOperation op; // 异步加载场景的操作对象

    // 加载地图
    IEnumerator loadMap(AsyncOperation _op)
    {
        while(!_op.isDone)
        {
            //Debug.Log(op.progress);
            yield return new WaitForEndOfFrame();
        }

        // 地图加载结束
        onLoadEnd();
    }

    // 在开始加载地图的时候，把消息阻塞
    private void onLoadBegin()
    {
        // 重置一些状态
        UIManager.Instance.OpenEventSystem = false;
        //FightUIMgr.Instance.Reset();
        NpcMgr.Instance.Reset();
        RoleMgr.Instance.Reset();
        if (_curSceneLogic != null) { _curSceneLogic.Reset(); }

        Net.Instance.IsPause = true;
    }
    // 在地图加载完毕，把消息阻塞取消
    private void onLoadEnd()
    {
        FightUIMgr.Instance.Init();

        // 加入一个摄像机
        _curSceneLogic = new SceneLogic();
        _curSceneLogic.Init();

        UIManager.Instance.OpenEventSystem = true;

        Net.Instance.IsPause = false;
    }

    // 解析LoadMap消息
    public static void OnLoadMap(NCmd.Cmd cmd)
    {
        NCmd.LoadMap loadMapCmd = cmd as NCmd.LoadMap;

        var mapId = loadMapCmd.MapID;
        // 到地图表里面去找地图场景路径
        var mapScenePath = MapTable.Instance[mapId].ScenePath;

        SceneMgr.Instance.LoadScene(mapScenePath);
        // 告诉选人界面，跳场景了，让他有机会去处理一些事情
        SelectRoleMgr.Instance.OnLoadScene();
    }

    // 加载场景
    public void LoadScene(string mapScenePath)
    {
        // 加载场景
        onLoadBegin();
        var op = SceneManager.LoadSceneAsync(mapScenePath);
        QuickCoroutine.Instance.StartCoroutine(loadMap(op));
    }
}
